﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OBL1_DiseñoDeAplicaciones.ObjetosDeNegocio
{
    class Subproyecto:Subdivision
    {
        private ListaSubdivision componentes;

        public ListaSubdivision Componentes
        {
            get { return componentes; }
            set { componentes = value; }
        }

        //Constructor por defecto
        public Subproyecto(string descripcion, ListaSubdivision componentes, Proyecto parent = null) : base(descripcion, parent) {
            this.componentes = componentes;
        }

        //Constructor por copia
        public Subproyecto(int id, string descripcion, ListaSubdivision componentes, Proyecto parent = null) : base(id, descripcion, parent) {
            this.componentes = componentes;
        }


        public override DateTime ObtenerFechaInicio() {

            return componentes.ResolverFechaInicio();
        }

        public override double ObtenerCostoTotal(int pIva) {
            return componentes.ResolverCostoTotal(pIva);
        }

        public override Subdivision Clonar(Proyecto pNuevoPadre)
        {
            Subproyecto s = new Subproyecto(this.Id, this.Descripcion, null, pNuevoPadre);
            if (this.componentes.Elementos != null) {
                s.componentes = new ListaSubdivision();
                foreach (Subdivision sub in this.componentes.Elementos)
                {
                    s.componentes.AgregarSubdivision(sub.Clonar(s.Parent));
                }
            }
            
            return s;
        }

        public override void Modificarme(string pDescripcion,double pCosto,DateTime pFechaInicio)
        {
            this.Descripcion = pDescripcion;
            
        }

        public override string ToString()
        {
            string retorno = "Descripcion: " + this.Descripcion + "\n";
            retorno += "Fecha Inicio: " + this.ObtenerFechaInicio().ToShortDateString() + "\n";
            return retorno;
        }
    }
}
